A synthesis of dryland restoration techniques.

Purpose

To quantitatively examine the efficacy of vegetation restoration in drylands globally.

Questions

  1. What is the global extent of research that directly examined restoration of drylands?
  2. What were the common measures?
  3. Is the restoration of vegetation a common and primary focus?
  4. How frequently does the restoration measure outcomes beyond the focal species?
  5. What were the primary restoration goals as reported by primary authors?
  6. How much variation was there in the techniques tested and how long were experiments monitored and tested?
  7. How relatively effective were the techniques?

Step 2. Sort

A summary of sort process using PRISMA.

library(PRISMAstatement)
prisma(found = 1504,
       found_other = 5,
       no_dupes = 1039, 
       screened = 1039, 
       screen_exclusions = 861, 
       full_text = 178,
       full_text_exclusions = 101, 
       qualitative = 77, 
       quantitative = 66,
       width = 800, height = 800)

Step 3. Synthesize

Check data and calculate necessary measures.

#all data
#data <- read_csv("data/data.csv")
#data <- data %>%
  #mutate(lrr = log(mean.t/mean.c), rii = ((mean.t-mean.c)/(mean.t + mean.c)), var.es = ((sd.t^2/n.t*mean.t^2) + (sd.c^2/n.c*mean.c^2)))

#other effect size estimates
#library(compute.es)
#data <- data %>%
  #mutate(d=mes(mean.t, mean.c, sd.t, sd.c, n.t, n.c, level = 95, #cer = 0.2, dig = 2, , id = ID, data = data))
#check metafor

#all data
paperdata <- read_csv("data/paper_data.csv")
paperdata <- paperdata %>%
  mutate(lrr = log(mean.t/mean.c), rii = ((mean.t-mean.c)/(mean.t + mean.c)), var.es = ((sd.t^2/n.t*mean.t^2) + (sd.c^2/n.c*mean.c^2)))

Step 4. Summarize

Explore summary level data of all data. Explore aggregation levels that support the most reasonable data structure and minimize non-independence issues.

#evidence map####
require(maps)
world<-map_data("world")
map<-ggplot() + geom_polygon(data=world, fill="gray50", aes(x=long, y=lat, group=group))
map + geom_point(data=paperdata, aes(x=long, y=lat)) +
  labs(x = "longitude", y = "latitude") #render a literal map, i.e. evidence map, of where we study the niche in deserts globally

#add in levels and color code points on map####
map + geom_point(data=paperdata, aes(x=long, y=lat, color = paradigm)) + 
  scale_color_brewer(palette = "Paired") +
  labs(x = "longitude", y = "latitude", color = "")

#aggregation####
se <- function(x){
  sd(x)/sqrt(length(x))
}

data.simple <- paperdata %>%
  group_by(study.ID, paradigm, technique, measure.success) %>%
  summarise(n = n(), mean.lrr = mean(lrr), mean.rii = mean(rii), mean.var = mean(var.es))

main.data <- paperdata %>%
  group_by(study.ID, paradigm, intervention, outcome) %>%
  summarise(n = n(), mean.lrr = mean(lrr), mean.rii = mean(rii), mean.var = mean(var.es))


#EDA data####
simple.data <- paperdata %>% group_by(study.ID, paradigm, technique, measure.success) %>% summarise(mean.rii = mean(rii), error = se(rii))
simple.data <- na.omit(simple.data)

parad.data <- paperdata %>% group_by(study.ID, paradigm) %>% summarise(mean.rii = mean(rii), error = se(rii))
parad.data <- na.omit(parad.data)

tech.data <- paperdata %>% group_by(study.ID, technique) %>% summarise(mean.rii = mean(rii), error = se(rii))
tech.data <- na.omit(tech.data)

tech.data
## # A tibble: 31 x 4
## # Groups:   study.ID [31]
##    study.ID technique                             mean.rii  error
##       <dbl> <chr>                                    <dbl>  <dbl>
##  1       13 planting                              -0.00830 0.0423
##  2       51 planting, grazing exclusion            0.128   0.0982
##  3       66 seeding, shrub facilitation            0.0762  0.0275
##  4       68 planting                              -0.177   0.0548
##  5       69 grazing exclusion                      0.502   0.0749
##  6       77 mowing, grazing                        0.0613  0.472 
##  7       87 fertilization, biostimulants, seeding -0.0138  0.0137
##  8       88 seeding                               -0.130   0.0153
##  9       95 seeding, planting                     -0.228   0.0415
## 10      104 mycorrhizal                            0.307   0.0230
## # ... with 21 more rows
success.data <- paperdata %>% group_by(study.ID, measure.success) %>% summarise(mean.rii = mean(rii), error = se(rii))
success.data <- na.omit(success.data)


#active
active <- paperdata %>%
  filter(paradigm == "active")

#viz for aggregation####

disturbance.data <- paperdata %>% group_by(study.ID,disturbance, paradigm) %>% count()
disturbance.data2 <- disturbance.data %>% group_by(disturbance,paradigm) %>% count()
ggplot(na.omit(disturbance.data2), aes(disturbance,nn, fill=paradigm))+ geom_bar(stat = "identity") + coord_flip(ylim=0:44) + scale_fill_brewer(palette = "Blues")

intervention.data <- active %>% group_by(study.ID,intervention, paradigm) %>% count()
intervention.data2 <- intervention.data %>% group_by(intervention,paradigm) %>% count()
ggplot(na.omit(intervention.data2), aes(intervention,nn, fill=paradigm))+ geom_bar(stat = "identity") + coord_flip(ylim=0:44) + scale_fill_brewer(palette = "Blues")

technique.data <- paperdata %>% group_by(study.ID,technique, paradigm) %>% count()
technique.data2 <- technique.data %>% group_by(technique,paradigm) %>% count()
technique.data3 <- technique.data2 %>% group_by(technique) %>% count()


ggplot(na.omit(data.simple), aes(technique, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired")

ggplot(na.omit(data.simple), aes(measure.success, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired")

#better
ggplot(main.data, aes(intervention, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired") +
  labs(fill = "")

ggplot(main.data, aes(outcome, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired") +
  labs(fill = "")

Step 5a. EDA

Exploratory data analyses to understand data and QA/QC using Rii.

Step 5b. Models

Meta and conventional statistical models to explore relative efficacy.

Step 5. Synthesis stats

#p-value meta
library(metap)
#all data for metas but cleaned for na's
mdata <- paperdata %>%
  filter(paradigm == "active") %>%
  filter(!is.na(lrr)) %>%
  filter(!is.na(var.es)) %>%
  filter(!is.na(n.t)) %>%
  filter(!is.na(p)) %>%
  filter(!is.na(intervention)) %>%
  filter(is.finite(lrr))

#aggregated data for metas var estimated with central tendency
#note - could also bootstrap mean variance here instead of arithematic mean
simple.mdata <- mdata %>%
  group_by(intervention) %>%
  summarise(lrr = mean(lrr), var.es = mean(var.es), n = mean(n.t))

simple.mdata.2 <- mdata %>%
  group_by(intervention, outcome) %>%
  summarise(lrr = mean(lrr), var.es = mean(var.es), n = mean(n.t))  

simple.mdata.var <- mdata %>%
  group_by(intervention) %>%
  summarise(lrr = mean(lrr), var.es = se(var.es), n = mean(n.t))

simple.mdata2.var <- mdata %>%
  group_by(intervention, outcome) %>%
  summarise(lrr = mean(lrr), var.es = se(var.es), n = mean(n.t))

#metas with p-values####
schweder(mdata$p)

sumz(p, data = mdata)
## sumz =  41.12464 p =  0
mdata %>%
  split(.$intervention) %>%
  purrr::map(~sumz(.$p)) 
## $soil
## sumz =  18.79543 p =  4.115748e-79 
## 
## $vegetation
## sumz =  33.99045 p =  1.541376e-253 
## 
## $`water addition`
## sumz =  13.53169 p =  5.082856e-42
sumlog(mdata$p)
## chisq =  4002.878  with df =  1438  p =  4.380539e-240
#metas with meta package on effect size measures####
library(meta)
#all data non-aggregated
m <- metagen(lrr, var.es, studlab = ID, byvar = intervention, data = mdata)
summary(m)
## Number of studies combined: k = 665
## 
##                                          95%-CI            z  p-value
## Fixed effect model   -0.0063 [-0.0063; -0.0063] -40590292.09        0
## Random effects model  0.2266 [ 0.1715;  0.2816]         8.07 < 0.0001
## 
## Quantifying heterogeneity:
## tau^2 = 0.1848; H = 21775022.93 [21775022.02; 21775023.84]; I^2 = 100.0% [100.0%; 100.0%]
## 
## Quantifying residual heterogeneity:
## H = 21807890.91 [21807890.00; 21807891.82]; I^2 = 100.0% [100.0%; 100.0%]
## 
## Test of heterogeneity:
##                      Q d.f. p-value
##  314836678046932224.00  664       0
## 
## Results for subgroups (fixed effect model):
##                                 k                     95%-CI
## intervention = vegetation     442 -0.0063 [-0.0063; -0.0063]
## intervention = soil           148  0.7206 [ 0.7204;  0.7209]
## intervention = water addition  75  0.0037 [ 0.0025;  0.0049]
##                                                   Q   tau^2    I^2
## intervention = vegetation     314836678003004992.00  0.1848 100.0%
## intervention = soil                      2625290.13  0.0583 100.0%
## intervention = water addition                109.93 <0.0001  32.7%
## 
## Test for subgroup differences (fixed effect model):
##                                    Q d.f. p-value
## Between groups           41301796.69    2       0
## Within groups  314836678005630400.00  662       0
## 
## Results for subgroups (random effects model):
##                                 k                   95%-CI
## intervention = vegetation     442 0.2160 [ 0.1549; 0.2771]
## intervention = soil           148 0.2970 [ 0.2183; 0.3756]
## intervention = water addition  75 0.0073 [-0.0012; 0.0158]
##                                                   Q   tau^2    I^2
## intervention = vegetation     314836678003004992.00  0.1848 100.0%
## intervention = soil                      2625290.13  0.0583 100.0%
## intervention = water addition                109.93 <0.0001  32.7%
## 
## Test for subgroup differences (random effects model):
##                      Q d.f.  p-value
## Between groups   94.11    2 < 0.0001
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
funnel(m)

#metabias(m)
#forest(m, sortvar = intervention)

m.study <- metagen(lrr, var.es, studlab = study.ID, byvar = intervention, data = mdata)
summary(m.study)
## Number of studies combined: k = 665
## 
##                                          95%-CI            z  p-value
## Fixed effect model   -0.0063 [-0.0063; -0.0063] -40590292.09        0
## Random effects model  0.2266 [ 0.1715;  0.2816]         8.07 < 0.0001
## 
## Quantifying heterogeneity:
## tau^2 = 0.1848; H = 21775022.93 [21775022.02; 21775023.84]; I^2 = 100.0% [100.0%; 100.0%]
## 
## Quantifying residual heterogeneity:
## H = 21807890.91 [21807890.00; 21807891.82]; I^2 = 100.0% [100.0%; 100.0%]
## 
## Test of heterogeneity:
##                      Q d.f. p-value
##  314836678046932224.00  664       0
## 
## Results for subgroups (fixed effect model):
##                                 k                     95%-CI
## intervention = vegetation     442 -0.0063 [-0.0063; -0.0063]
## intervention = soil           148  0.7206 [ 0.7204;  0.7209]
## intervention = water addition  75  0.0037 [ 0.0025;  0.0049]
##                                                   Q   tau^2    I^2
## intervention = vegetation     314836678003004992.00  0.1848 100.0%
## intervention = soil                      2625290.13  0.0583 100.0%
## intervention = water addition                109.93 <0.0001  32.7%
## 
## Test for subgroup differences (fixed effect model):
##                                    Q d.f. p-value
## Between groups           41301796.69    2       0
## Within groups  314836678005630400.00  662       0
## 
## Results for subgroups (random effects model):
##                                 k                   95%-CI
## intervention = vegetation     442 0.2160 [ 0.1549; 0.2771]
## intervention = soil           148 0.2970 [ 0.2183; 0.3756]
## intervention = water addition  75 0.0073 [-0.0012; 0.0158]
##                                                   Q   tau^2    I^2
## intervention = vegetation     314836678003004992.00  0.1848 100.0%
## intervention = soil                      2625290.13  0.0583 100.0%
## intervention = water addition                109.93 <0.0001  32.7%
## 
## Test for subgroup differences (random effects model):
##                      Q d.f.  p-value
## Between groups   94.11    2 < 0.0001
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
#funnel(m)
#metabias(m)
#forest(m, sortvar = intervention)

#aggregated data
m1 <- metagen(lrr, var.es, studlab = intervention, data = simple.mdata)
summary(m1)
## Number of studies combined: k = 3
## 
##                                                           95%-CI     z
## Fixed effect model   -0.1410 [-2665220102.7886; 2665220102.5067] -0.00
## Random effects model -0.1410 [-2665220102.7886; 2665220102.5067] -0.00
##                      p-value
## Fixed effect model    1.0000
## Random effects model  1.0000
## 
## Quantifying heterogeneity:
## tau^2 = 0; H = 1.00 [1.00; 1.00]; I^2 = 0.0% [0.0%; 0.0%]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  0.00    2  1.0000
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
funnel(m1)

metabias(m1)
#forest(m, sortvar = intervention)

#different var estimate
m2 <- metagen(lrr, var.es, studlab = intervention, data = simple.mdata.var)
summary(m2)
## Number of studies combined: k = 3
## 
##                                                           95%-CI     z
## Fixed effect model   -0.1411 [-2124790615.1428; 2124790614.8606] -0.00
## Random effects model -0.1411 [-2124790615.1428; 2124790614.8606] -0.00
##                      p-value
## Fixed effect model    1.0000
## Random effects model  1.0000
## 
## Quantifying heterogeneity:
## tau^2 = 0; H = 1.00 [1.00; 1.00]; I^2 = 0.0% [0.0%; 0.0%]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  0.00    2  1.0000
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
funnel(m2)

metabias(m2)
#forest(m, sortvar = intervention)


m3 <- metagen(lrr, var.es, studlab = intervention, byvar = outcome, data = simple.mdata.2)
summary(m3)
## Number of studies combined: k = 9
## 
##                                       95%-CI    z p-value
## Fixed effect model   0.7569 [0.2559; 1.2579] 2.96  0.0031
## Random effects model 0.7569 [0.2559; 1.2579] 2.96  0.0031
## 
## Quantifying heterogeneity:
## tau^2 = 0; H = 1.00 [1.00; 1.00]; I^2 = 0.0% [0.0%; 0.0%]
## 
## Quantifying residual heterogeneity:
## H = 1.00 [1.00; 1.00]; I^2 = 0.0% [0.0%; 0.0%]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  0.00    8  1.0000
## 
## Results for subgroups (fixed effect model):
##                     k                                  95%-CI    Q tau^2
## outcome = habitat   3 -0.0964 [  -931930.0955;   931929.9027] 0.00     0
## outcome = plants    3  0.7569 [        0.2559;        1.2579] 0.00     0
## outcome = soil      2  0.0965 [   -12756.5551;    12756.7482] 0.00     0
## outcome = animals   1  0.3101 [-87021594.0357; 87021594.6560] 0.00    --
##                    I^2
## outcome = habitat 0.0%
## outcome = plants  0.0%
## outcome = soil    0.0%
## outcome = animals   --
## 
## Test for subgroup differences (fixed effect model):
##                   Q d.f. p-value
## Between groups 0.00    3  1.0000
## Within groups  0.00    5  1.0000
## 
## Results for subgroups (random effects model):
##                     k                                  95%-CI    Q tau^2
## outcome = habitat   3 -0.0964 [  -931930.0955;   931929.9027] 0.00     0
## outcome = plants    3  0.7569 [        0.2559;        1.2579] 0.00     0
## outcome = soil      2  0.0965 [   -12756.5551;    12756.7482] 0.00     0
## outcome = animals   1  0.3101 [-87021594.0357; 87021594.6560] 0.00    --
##                    I^2
## outcome = habitat 0.0%
## outcome = plants  0.0%
## outcome = soil    0.0%
## outcome = animals   --
## 
## Test for subgroup differences (random effects model):
##                     Q d.f. p-value
## Between groups   0.00    3  1.0000
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
#funnel(m)
radial(m3)

#metabias(m2)
#forest(m, sortvar = intervention)

m4 <- metagen(lrr, var.es, studlab = intervention, byvar = outcome, data = simple.mdata2.var)
summary(m4)
## Number of studies combined: k = 9
## 
##                                       95%-CI    z  p-value
## Fixed effect model   0.7569 [0.5221; 0.9917] 6.32 < 0.0001
## Random effects model 0.7569 [0.5221; 0.9917] 6.32 < 0.0001
## 
## Quantifying heterogeneity:
## tau^2 = 0; H = 1.00 [1.00; 1.00]; I^2 = 0.0% [0.0%; 0.0%]
## 
## Quantifying residual heterogeneity:
## H = 1.00 [1.00; 1.00]; I^2 = 0.0% [0.0%; 0.0%]
## 
## Test of heterogeneity:
##     Q d.f. p-value
##  0.00    8  1.0000
## 
## Results for subgroups (fixed effect model):
##                     k                                  95%-CI    Q tau^2
## outcome = habitat   3 -0.0963 [  -780578.6315;   780578.4389] 0.00     0
## outcome = plants    3  0.7569 [        0.5221;        0.9917] 0.00     0
## outcome = soil      2  0.0418 [    -6173.7003;     6173.7839] 0.00     0
## outcome = animals   1  0.3101 [-73938869.3024; 73938869.9227] 0.00    --
##                    I^2
## outcome = habitat 0.0%
## outcome = plants  0.0%
## outcome = soil    0.0%
## outcome = animals   --
## 
## Test for subgroup differences (fixed effect model):
##                   Q d.f. p-value
## Between groups 0.00    3  1.0000
## Within groups  0.00    5  1.0000
## 
## Results for subgroups (random effects model):
##                     k                                  95%-CI    Q tau^2
## outcome = habitat   3 -0.0963 [  -780578.6315;   780578.4389] 0.00     0
## outcome = plants    3  0.7569 [        0.5221;        0.9917] 0.00     0
## outcome = soil      2  0.0418 [    -6173.7003;     6173.7839] 0.00     0
## outcome = animals   1  0.3101 [-73938869.3024; 73938869.9227] 0.00    --
##                    I^2
## outcome = habitat 0.0%
## outcome = plants  0.0%
## outcome = soil    0.0%
## outcome = animals   --
## 
## Test for subgroup differences (random effects model):
##                     Q d.f. p-value
## Between groups   0.00    3  1.0000
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
#funnel(m)
radial(m4)

#metabias(m2)
#forest(m, sortvar = intervention)
forest(m1, sortvar = intervention, fontsize = 10, xlim = c(-2, 2))

forest(m2, sortvar = intervention, fontsize = 10, xlim = c(-2, 2))

forest(m3, sortvar = intervention, fontsize = 10, xlim = c(-2, 2))

forest(m4, sortvar = intervention, fontsize = 10, xlim = c(-2, 2))

#t-tests for lrr diff from 0
mdata %>%
  split(.$intervention) %>%
  purrr::map(~sumz(.$lrr)) 
## $soil
## sumz =  4.311194 p =  8.11875e-06 
## 
## $vegetation
## sumz =  7.923509 p =  1.154502e-15 
## 
## $`water addition`
## sumz =  1.52389 p =  0.06376814
#effect sizes plots
#need better ci estimates
ggplot(simple.mdata, aes(intervention, lrr)) +
  ylim(c(-2,2)) +
  geom_point(position = position_dodge(width = 0.5)) + 
  labs(x = "", y = "lrr") +
  coord_flip() +
  geom_errorbar(aes(ymin=lrr-var.es, ymax=lrr+var.es), width=.05, position = position_dodge(width = 0.5)) +
  geom_hline(yintercept = 0, colour="grey", linetype = "longdash")

ggplot(simple.mdata.2, aes(intervention, lrr, color = outcome)) +
  ylim(c(-2,2)) +
  geom_point(position = position_dodge(width = 0.5)) + 
  labs(x = "", y = "lrr", color = "") +
  coord_flip() +
  geom_errorbar(aes(ymin=lrr-var.es, ymax=lrr+var.es), width=.05, position = position_dodge(width = 0.5)) +
  geom_hline(yintercept = 0, colour="grey", linetype = "longdash")

ggplot(mdata, aes(lrr, color = intervention)) +
  geom_freqpoly(binwidth = 0.5, size = 2) + 
  xlim(c(-10, 10)) +
  labs(x = "lrr", y = "frequency", color = "") +
  geom_vline(xintercept = 0, colour="grey", linetype = "longdash") +
  scale_color_brewer()

ggplot(mdata, aes(lrr, fill = intervention)) +
  geom_dotplot(binwidth = 1) + 
  xlim(c(-10, 10)) +
  labs(x = "lrr", y = "frequency", fill = "") +
  geom_vline(xintercept = 0, colour="grey", linetype = "longdash") +
  scale_fill_brewer()